---
sidebar_position: 2
---

# Метрики, журналы и трассировки

**Метрики, журналы и трассировки** (metics, logs, traces — MLT) — это три столпа [наблюдаемости](../../lectures/observability/intro.md), которые могут обеспечить нам полную видимость программной системы. В этой работе мы собираемся настроить систему, в которой данные MLT собираются из микросервисного приложения на Python.

## Что такое метрики, журналы и трассировки (MLT)?

### Метрики

**Метрики** показывают то, как используется системный ресурс. Обычно они числовые. Например:

- Сколько ресурсов процессора было использовано за последний час?
- Сколько дискового пространства потребляется?
- Какая пропускная способность была использована?

### Журналы

**Журналы** (логи) — это события, которые записывает работающее программное обеспечение. Например:

- Регистрируют трассировку стека ошибки времени выполнения.
- Регистрируют, когда пользователь обращается к системе.
- Регистрируют критическую ошибку.

### Трассировки

**Трассировки** показывают путь выполнения программы. В микросервисной/распределенной системе запрос от клиента может обрабатываться несколькими службами. Важно знать, по какому пути был обработан запрос и сколько времени потребовалось на обработку в каждом узле, чтобы можно было выявить ошибки и узкие места.

## Подробнее о MLT

Необязательно собирать все три компонента MLT. Журналы являются наиболее важным элементом для сбора, поскольку они сообщают, какие ошибки произошли и как выполняется программное обеспечение.

Метрики — следующий по важности элемент для сбора данных. С помощью метрик мы можем знать, насколько хорошо работает программное обеспечение и нужно ли оптимизировать функции или масштабировать серверы.

Наконец, с помощью трассировки мы можем отслеживать, в какой последовательности был обработан запрос. Ранее в этом не было необходимости, поскольку большинство систем были монолитными и не требовали трассировки. Но поскольку микросервисы и распределенные системы становятся все более популярными, становится все более важным отслеживать, как запросы проходят через каждую службу в системе.

Таким образом, мы должны получить полную наблюдаемость системы, собирая метрики, журналы и трассировки. В дополнение к этому, мы должны иметь возможность легко сопоставлять MLT, чтобы лучше понять систему. Например, из журнала мы также должны иметь возможность перейти к его трассировке с того места, где он был сформирован, и наоборот.

## OpenTelemetry

[**OpenTelemetry** (OTel)](https://opentelemetry.io/) — это платформа наблюдения с открытым исходным кодом, которая позволяет собирать данные телеметрии из облачных приложений. Она предлагает инструменты, API и SDK для сбора и генерации метрик, журналов и трассировок. OpenTelemetry поддерживает несколько языков, включая Java, Python, Go, Ruby, C++ и Javascript.

## Как мы можем собирать MLT?

Для сбора данных MLT можно использовать следующие инструменты. Конечно, есть и другие альтернативы. Но для этой работы мы будем использовать инструменты, приведенные ниже:

- **Панель мониторинга** *Grafana*: это панель мониторинга, где мы будем наблюдать за данными MLT, собранными остальными сервисами.
- **Мониторинг** *Prometheus*: собирает и хранит показатели из приложений.
- **Ведение журнала** *Promtail*: собирает данные журнала из приложений и отправляет их в *Loki*.
- **Ведение журнала** *Loki*: агрегирует и хранит все журналы, отправленные Promtail.
- **Трассировка** *Opentelemetry*: настраивает приложение для сбора трассировок и отправляет их Jaeger.
- **Трассировка** *Jaeger*: собирает и хранит информацию о трассировке. Также помогает в визуализации трассировки.

На следующем рисунке приведены зависимости инструментов:

![MLT](./images/MLT.png)
